Skip to content

Enh: support actuator dynamics from ActiveRocketPy - #39

Merged
zuorenchen merged 3 commits into
developfrom
enh/ActuatorDynamics
Jun 26, 2026
Merged

Enh: support actuator dynamics from ActiveRocketPy#39
zuorenchen merged 3 commits into
developfrom
enh/ActuatorDynamics

Conversation

@zuorenchen

@zuorenchen zuorenchen commented Jun 25, 2026

Copy link
Copy Markdown
Member

Following the ActiveRocketPy updates on actuator dynamics, implement them in BalloonPoppingChallenge

This PR will be completed after these two:

@zuorenchen
zuorenchen force-pushed the enh/ActuatorDynamics branch from 7cd8d95 to 9bb0ee9 Compare June 25, 2026 23:18
@zuorenchen zuorenchen changed the title Enh/actuator dynamics Enh: actuator dynamics Jun 25, 2026
@zuorenchen zuorenchen changed the title Enh: actuator dynamics Enh: support actuator dynamics from ActiveRocketPy Jun 26, 2026
@zuorenchen
zuorenchen marked this pull request as ready for review June 26, 2026 21:13
@zuorenchen
zuorenchen merged commit b4aae2f into develop Jun 26, 2026
0 of 2 checks passed
@zuorenchen
zuorenchen deleted the enh/ActuatorDynamics branch June 26, 2026 21:27
@zuorenchen zuorenchen mentioned this pull request Jul 26, 2026
@thc1006

thc1006 commented Jul 28, 2026

Copy link
Copy Markdown
Member

Retrospective, since this is merged and v0.1.0 is going out on top of it.

Two things I checked in the code rather than inferred, both of which belong in the release notes rather than in a change to this PR.

The gimbal parameter rename is a breaking change for competitors. gimbal_range became max_gimbal_angle with no alias, and that key is in the whitelist agents receive: it is present in both *_given_parameters.yaml on v0.0.2. An agent that reads it raises KeyError on v0.1.0. The shipped example agents do not read it, so the examples still run. I have put it at the top of the draft release notes on #61 rather than proposing an alias this close to the deadline, but the alias is three lines if you would rather have one.

The actuator dynamics path was not exercised when this landed. Both scenarios set all three time constants to null, so the golden masters only covered pass-through. That gap is real and #66 and #71 have since closed it; #71's mutation run showed the earlier tests stayed green with the sampling rate halved and with the roll actuator's filter bypassed entirely.

Separately, while following the TVC integration I found that the flight equations reduce axial thrust for a gimbal deflection and apply the resulting moments, but never add the lateral components of that same thrust vector to the translational equations. At the shipped 15 degree limit on both axes that omits 0.366 * T, and two 15 degree axes reach a combined deflection of 21.47 degrees. Raised upstream as ARRC-Rocket/ActiveRocketPy#21.

I would not hold v0.1.0 for it. It is upstream, it predates this release, every entrant runs the same model so nothing is unfair, and changing the force model five days out would invalidate both golden masters and any submission already made. What it does mean is that the release should not describe the thrust vector model as validated, which the draft notes say plainly.

One more contract question worth its own issue rather than a fix here: the launch branch creates the Flight but does not read tvc, roll or throttle from that same action. Nothing is simulated on the launch step either, so nothing is lost in practice, but accepting a full action and using three of its fields is worth stating one way or the other.

thc1006 added a commit that referenced this pull request Jul 28, 2026
Cutting the 0.1.0 header here left the file arguing with itself: a
2026-07-DD placeholder date, no Unreleased section, an Unreleased
comparison link with nothing above it, no 0.1.0 link, and CONTRIBUTING
telling contributors to add entries to a section that no longer existed.
The release scope is also still open, so the section would have to be
edited again anyway. Unreleased needs no date, and the release PR is what
renames it and adds the link.

Record the migration #39 requires. It is described as additive, and it is
not: rocket.control.gimbal_range became max_gimbal_angle and the three
time-constant keys became required, so a scenario file written for v0.0.2
raises KeyError: 'max_gimbal_angle' on the first launch action. Measured
against the shipped scenario 0 with the old key names.

Add the coordinate-frame correction from #68. Z is altitude above sea
level rather than height above the pad, in balloon_states, the GNSS
sensors and the rocket state, which is the kind of thing an agent aims
with. It was the largest omission in the file.

Drop #46 from the ActiveRocketPy relock. It landed on 2026-06-27, a month
before #60 bumped the submodule to 1.13, so it cannot have relocked
against it; #62 did.

Say "users and contributors" in both files, since the entries already
include tests, CI and tooling.

Point the vpython instructions at one command with both extras. uv sync is
exact, so running --extra vpython after --extra dev uninstalls the dev
extra. Measured: ruff was present, then gone, then present again with both
extras named together.

Give the Makefile a .PHONY, so a file named format does not shadow the
target.

Signed-off-by: thc1006 <84045975+thc1006@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants